package com.neuedu.corejava.ch5;

/**
 * 20190731下午
 * 基本数据类型与引用数据类型在方法调用时的差别--没弄懂
 * 
 * 
 * @author admin
 *
 */


public class ReferenceParameter {
	
	//1.
	public void change(int a){//参数是基本类型
		a=12;
		System.out.println("in method"+a);
	}
	//2.
	public void change(String str){//参数是一个对象类型，引用数据类型
		str="in method";
		System.out.println(str);
	}
	//3.
	public void change(int[] array){//数组是一个引用数据类型
		array[0]=9;//修改数组内部的数据，会影响实参的数据;没有对数组重新赋值
		for(int i:array){
			System.out.print(i+"\t");
		}
		System.out.println();
		
	}
	//4.
	public void change2(int[] array){//数组是一个引用数据类型
		array=new int[]{2,3,4,5};//修改数组的引用,重新对数组进行赋值操作，方法内部的修改，不会影响到方法外部
		for(int i:array){
			System.out.print(i+"\t");
		}
		System.out.println();
		
	}
	
	
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		ReferenceParameter rp=new ReferenceParameter();
		
		//1.基本数据类型
		int a=10;
		rp.change(a);//传值调用
		System.out.println("afer change"+a);
		
		//2.
		String str="Hello 引用数据类型";
		rp.change(str);//传引用调用，传递的参数是一个引用数据类型
		System.out.println("afer change"+str);
		
		//3.
		int[] array=new int[]{1,2,3,4,5,6};
		rp.change(array);//传引用调用，传递的参数是一个引用数据类型
		System.out.println("afer change");
		for(int k:array){
			System.out.print(k+"\t");
		}
		System.out.println();
		System.out.println();
		
		//4.
		array=new int[]{1,2,3,4,5,6};
		rp.change2(array);//传引用调用，传递的参数是一个引用数据类型，在方法内部修改引用，不影响方法外面
		System.out.println("afer change");
		for(int k:array){
			System.out.print(k+"\t");
		}
		System.out.println();
		

	}

}
